package 行为型设计模式.动态代理模式.demo;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

/**
 *  创建动态代理调用处理器
 * @Author lf
 * @Date 3/19/2024
 */
public class CalculatorInvocationHandler implements InvocationHandler {

    private final  Calculator calculator;

    public CalculatorInvocationHandler(Calculator calculator) {
        this.calculator = calculator;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        // 在调用具体方法前可以添加自己的操作
        System.out.println("Method " + method.getName() + " is called with args: " + args[0] + " and " + args[1]);
        // 调用目标对象的方法
        Object invoke = method.invoke(calculator, args);

        // 在调用具体方法后可以添加自己的操作
        System.out.println("Method " + method.getName() + " returns: " + invoke);


        return invoke;
    }
}
